// #include <iostream>
// using namespace std;
// const int N = 40;
// #define int long long
// int x[N][N][N];
// int w(int a, int b, int c)
// {
//     if (a < N && b < N && c < N && a >= 0 && b >= 0 && c >= 0 && x[a][b][c] != 0)
//     {
//         return x[a][b][c];
//     }
//     if (a <= 0 || b <= 0 || c <= 0)
//     {
//         return 1;
//     }
//     else if (a > 20 || b > 20 || c > 20)
//     {
//         return w(20, 20, 20);
//     }
//     else if (a < b && b < c)
//     {
//         if (a < N && b < N && c < N && a >= 1 && b >= 1 && c >= 1)
//         {
//             x[a][b][c - 1] = w(a, b, c - 1);
//             x[a][b - 1][c - 1] = w(a, b - 1, c - 1);
//             x[a][b - 1][c] = w(a, b - 1, c);
//             return x[a][b][c - 1] + x[a][b - 1][c - 1] - x[a][b - 1][c];
//         }else {
//             return w(a, b, c - 1) + w(a, b - 1, c - 1) - w(a, b - 1, c);
//         }
        
//     }
//     else
//     {
//         if (a < N && b < N && c < N && a >= 1 && b >= 1 && c >= 1)
//         {
//             x[a - 1][b][c] = w(a - 1, b, c);
//             x[a - 1][b - 1][c] = w(a - 1, b - 1, c);
//             x[a - 1][b][c - 1] = w(a - 1, b, c - 1);
//             x[a - 1][b - 1][c - 1] = w(a - 1, b - 1, c - 1);
//             return x[a - 1][b][c] + x[a - 1][b - 1][c] + x[a - 1][b][c - 1] - x[a - 1][b - 1][c - 1];
//         }else {
//             return w(a - 1, b, c) + w(a - 1, b - 1, c) + w(a - 1, b, c - 1) - w(a - 1, b - 1, c - 1);
//         }
        
//     }
// }
// signed main()
// {
//     while (true)
//     {
//         int a, b, c;
//         cin >> a >> b >> c;
//         if (a == -1 && b == -1 && c == -1)
//         {
//             break;
//         }
//         int ans = w(a, b, c);
//         cout << "w(" << a << ", " << b << ", " << c << ") = " << ans << endl;
//     }
//     return 0;
// }


// 优化版本：
#include <iostream>
using namespace std;

const int N = 40;
#define int long long
int x[N][N][N];  // Cache array

int w(int a, int b, int c)
{
    // If out of bounds, return 1
    if (a <= 0 || b <= 0 || c <= 0)
    {
        return 1;
    }
    // If all values exceed 20, call w(20, 20, 20)
    if (a > 20 || b > 20 || c > 20)
    {
        return w(20, 20, 20);
    }
    // If the result has been calculated before, return it
    if (x[a][b][c] != 0)
    {
        return x[a][b][c];
    }

    // Otherwise, calculate the result
    if (a < b && b < c)
    {
        x[a][b][c - 1] = w(a, b, c - 1);
        x[a][b - 1][c - 1] = w(a, b - 1, c - 1);
        x[a][b - 1][c] = w(a, b - 1, c);
        x[a][b][c] = x[a][b][c - 1] + x[a][b - 1][c - 1] - x[a][b - 1][c];
    }
    else
    {
        x[a - 1][b][c] = w(a - 1, b, c);
        x[a - 1][b - 1][c] = w(a - 1, b - 1, c);
        x[a - 1][b][c - 1] = w(a - 1, b, c - 1);
        x[a - 1][b - 1][c - 1] = w(a - 1, b - 1, c - 1);
        x[a][b][c] = x[a - 1][b][c] + x[a - 1][b - 1][c] + x[a - 1][b][c - 1] - x[a - 1][b - 1][c - 1];
    }

    return x[a][b][c];
}

signed main()
{
    // Initialize cache array to 0 (optional but ensures no garbage values)
    for (int i = 0; i < N; i++)
        for (int j = 0; j < N; j++)
            for (int k = 0; k < N; k++)
                x[i][j][k] = 0;

    while (true)
    {
        int a, b, c;
        cin >> a >> b >> c;
        if (a == -1 && b == -1 && c == -1)
        {
            break;
        }
        int ans = w(a, b, c);
        cout << "w(" << a << ", " << b << ", " << c << ") = " << ans << endl;
    }
    return 0;
}
